package com.itheima.handle;


import com.itheima.exception.BaseException;
import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
//1.定义全局异常处理器类
//  添加@RestControllerAdvice注解，就可以处理所有处理所有controller层抛出的异常
@RestControllerAdvice
//@ControllerAdvice  ：处理所有controller层抛出的异常
//@Responsebody  ：直接封装并返回异常结果数据给前端
public class GlobalExceptionHandler {

    /*
        项目中的异常：
            1.系统异常：Exception （程序存在bug）
                1. 记录日志
                2. 通知相关人员，处理异常
                3. 返回错误信息
            2.业务异常：自定义异常 （用户操作不当）
                1. 记录日志
                2. 返回错误信息
     */


    //2.定义处理异常的方法
    //  添加@ExceptionHandler注解，指定处理什么异常
    @ExceptionHandler(Exception.class)
    public Result exceptionHandle(Exception ex) {
        //2.1 记录日志
        log.error("服务器发生异常：{}",ex.getMessage());
        ex.printStackTrace();
        //2.2 通知相关人员，处理异常
        log.error("给XXX发送短信/邮件");
        //2.3 返回错误信息
        return Result.error("sorry，系统发生异常，已经加急处理，请稍后再试！");
    }


    /**
     * 处理所有业务异常
     */
    @ExceptionHandler(BaseException.class)
    public Result exceptionBusinessHandle(BaseException ex) {
        //2.1 记录日志
        log.error("服务器发生异常：{}",ex.getMessage());
        ex.printStackTrace();
        //2.2 返回错误信息
        return Result.error(ex.getMessage()); //code=0 ,msg=ex.getMessage() ,data=null
    }

}
